import {Router} from 'vue-router';
import {FlowEnum, PageEnum} from '@/enums/pageEnum'
import {loginCheck, setHtmlTheme} from '@/utils'
import {ThemeEnum} from "@/enums/styleEnum";

export function createRouterGuards(router: Router) {
    // 前置
    router.beforeEach(async (to, from, next) => {
        // http://localhost:3000/#/chart/preview/792622755697790976?t=123
        // 把外部动态参数放入window.route.params，后续API动态接口可以用window.route?.params?.t来拼接参数
        // @ts-ignore
        if (!window.route) window.route = {params: {}}
        // @ts-ignore
        Object.assign(window.route.params, to.query)
        if (to.name === FlowEnum.FLOW_HOME_NAME) {
            setHtmlTheme(ThemeEnum.DEFAULT)
        } else {
            setHtmlTheme()
        }
        const Loading = window['$loading'];
        Loading && Loading.start();
        const isErrorPage = router.getRoutes().findIndex((item) => item.name === to.name);
        if (isErrorPage === -1) {
            next({name: PageEnum.ERROR_PAGE_NAME_404})
        }

        if (!loginCheck()) {
            if (to.name === PageEnum.BASE_LOGIN_NAME) {
                next()
            }
            next({name: PageEnum.BASE_LOGIN_NAME})
        }
        next()
    })

    router.afterEach((to, _, failure) => {
        const Loading = window['$loading'];
        document.title = (to?.meta?.title as string) || document.title;
        Loading && Loading.finish();
    })

    // 错误
    router.onError((error) => {
        console.log(error, '路由错误');
    });
}
